package com.interview.rtc.aigc.service;

import com.interview.rtc.aigc.dao.UserDao;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

/**
 * 异步任务服务
 * 负责处理需要异步执行的耗时操作
 */
@Service
public class AsyncJobService {

    private static final Logger logger = LoggerFactory.getLogger(AsyncJobService.class);
    
    // 简历状态常量
    public static final int RESUME_STATUS_NONE = 0;        // 未上传
    public static final int RESUME_STATUS_UPLOADED = 1;    // 已上传待分析
    public static final int RESUME_STATUS_ANALYZING = 2;   // 分析中
    public static final int RESUME_STATUS_COMPLETED = 3;   // 分析完成

    @Autowired
    private AIService aiService;

    @Autowired
    private UserService userService;

    /**
     * 异步分析简历并更新用户数据
     *
     * @param resumeContent 简历内容
     * @param userId 用户ID
     */
    @Async
    public void analyzeResumeAndUpdateUser(String resumeContent, Long userId) {
        try {
            logger.info("开始异步分析简历，用户ID: {}", userId);
            
            // 获取用户信息
            UserDao user = userService.getUserById(userId);
            if (user == null) {
                logger.warn("未找到用户，无法更新简历分析结果，用户ID: {}", userId);
                return;
            }
            
            // 更新状态为分析中
            user.setResumeStatus(RESUME_STATUS_ANALYZING);
            userService.updateUser(user);
            
            // 调用AI服务分析简历
            String analysisResult = aiService.analyzeResume(resumeContent);
            
            // 更新用户简历内容和状态
            user.setResume(analysisResult);
            user.setResumeStatus(RESUME_STATUS_COMPLETED);
            
            // 保存更新后的用户信息
            userService.updateUser(user);
            logger.info("用户简历分析和更新完成，用户ID: {}", userId);
        } catch (Exception e) {
            logger.error("异步分析简历并更新用户数据失败", e);
            
            // 发生异常时尝试更新用户状态为上传待分析
            try {
                UserDao user = userService.getUserById(userId);
                if (user != null) {
                    user.setResumeStatus(RESUME_STATUS_UPLOADED);
                    userService.updateUser(user);
                }
            } catch (Exception ex) {
                logger.error("更新用户简历状态失败", ex);
            }
        }
    }
} 